home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / dunquest.arc / DUNCHAR.BAS < prev    next >
Encoding:
BASIC Source File  |  1985-10-30  |  23.0 KB  |  491 lines

  1. 10 'DUNCHAR THE PLAYER CHARACTERS
  2. 20    DEFINT A-Z
  3. 30    GOSUB 2630      'TITLE SCREEN
  4. 40    GOSUB 3440      'OPEN FILES
  5. 50 'GET REPLY
  6. 60    GOSUB 2800      'PRINT MENU
  7. 70    GOSUB 4090      'GET REPLY
  8. 80    IF REPLY$ = "9" THEN GOTO 2290
  9. 90    IF REPLY$ = "1" THEN GOSUB 130 'CREATE A PLAYER
  10. 100    IF REPLY$ = "2" THEN GOSUB 4150 'LIST A PLAYER
  11. 110    IF REPLY$ = "3" THEN GOSUB 2330 'KILL A PLAYER
  12. 120    GOTO 50
  13. 130 'CREATE A PLAYER
  14. 140    CLS
  15. 150    GOSUB 1480      'GET NEXT AVAILABLE PLAYER
  16. 160    GOSUB 300      'GET CHARACTER ABILITIES
  17. 170    GOSUB 1180      'PRINT ABILITIES
  18. 180    GOSUB 680      'GET CLASS OF CHARACTER
  19. 190    CLS
  20. 200    GOSUB 1640      'ADJUST ABILITIES
  21. 210    GOSUB 2970      'GET HIT POINTS
  22. 220    GOSUB 3220      'GET MONEY
  23. 230    GOSUB 3330      'GET CHARACTER NAME
  24. 240    GOSUB 3740      'GET ALIGNMENT
  25. 250    GOSUB 3890      'GET SAVING THROWS
  26. 260    GOSUB 4820      'GET ARMOR CLASS ADJUSTMENT
  27. 270    GOSUB 3510      'UPDATE PLAYER RECORD
  28. 280 RETURN
  29. 290 '
  30. 300 'GET CHARACTER ABILITIES
  31. 310    RANDOMIZE TIMER
  32. 320    LET STRENGTH = INT(RND * 6) + 1
  33. 330    LET STRENGTH = STRENGTH + INT(RND * 6) + 1
  34. 340    LET STRENGTH = STRENGTH + INT(RND * 6) + 1
  35. 350    RANDOMIZE TIMER
  36. 360    LET INTELLIGENCE = INT(RND * 6) + 1
  37. 370    LET INTELLIGENCE = INTELLIGENCE  + INT(RND * 6) + 1
  38. 380    LET INTELLIGENCE = INTELLIGENCE  + INT(RND * 6) + 1
  39. 390    RANDOMIZE TIMER
  40. 400    LET WISDOM = INT(RND * 6) + 1
  41. 410    LET WISDOM = WISDOM + INT(RND * 6) + 1
  42. 420    LET WISDOM = WISDOM  + INT(RND * 6) + 1
  43. 430    RANDOMIZE TIMER
  44. 440    LET DEXTERITY = INT(RND * 6) + 1
  45. 450    LET DEXTERITY = DEXTERITY + INT(RND * 6) + 1
  46. 460    LET DEXTERITY = DEXTERITY + INT(RND * 6) + 1
  47. 470    RANDOMIZE TIMER
  48. 480    LET CONSTITUTION = INT(RND * 6) + 1
  49. 490    LET CONSTITUTION = CONSTITUTION + INT(RND * 6) + 1
  50. 500    LET CONSTITUTION = CONSTITUTION + INT(RND * 6) + 1
  51. 510    RANDOMIZE TIMER
  52. 520    LET CHARISMA = INT(RND * 6) + 1
  53. 530    LET CHARISMA = CHARISMA + INT(RND * 6) + 1
  54. 540    LET CHARISMA = CHARISMA + INT(RND * 6) + 1
  55. 550 'CHECK FOR LOOSER
  56. 560    LET VERY.LOW = 0
  57. 570    IF STRENGTH < 7 THEN LET VERY.LOW = VERY.LOW + 1
  58. 580    IF INTELLIGENCE < 7 THEN LET VERY.LOW = VERY.LOW + 1
  59. 590    IF WISDOM < 7 THEN LET VERY.LOW = VERY.LOW + 1
  60. 600    IF DEXTERITY < 7 THEN LET VERY.LOW = VERY.LOW + 1
  61. 610    IF CONSTITUTION < 7 THEN LET VERY.LOW = VERY.LOW + 1
  62. 620    IF CHARISMA < 7 THEN LET VERY.LOW = VERY.LOW + 1
  63. 630    IF VERY.LOW > 1 THEN GOTO 310
  64. 640    LET TOT.SCORE = STRENGTH + INTELLIGENCE + WISDOM + DEXTERITY                      + CONSTITUTION + CHARISMA
  65. 650    IF TOT.SCORE < 54 THEN GOTO 300
  66. 660 RETURN
  67. 670 '
  68. 680 'GET CLASS CHOICE
  69. 690    GOSUB 1350      'PRINT CHOICES
  70. 700 ' FIND HIGHEST SCORES
  71. 710    LET HISCORE$ = "STRENGTH"
  72. 720    LET HISCORE = STRENGTH
  73. 730    LET REC1$ = ""
  74. 740    LET REC2$ = ""
  75. 750    IF INTELLIGENCE > HISCORE THEN LET HISCORE = INTELLIGENCE:                        LET HISCORE$ = "INTELLIGENCE"
  76. 760    IF WISDOM > HISCORE THEN LET HISCORE = WISDOM:                                    LET HISCORE$ = "WISDOM"
  77. 770    IF DEXTERITY > HISCORE THEN LET HISCORE = DEXTERITY:                              LET HISCORE$ = "DEXTERITY"
  78. 780    IF HISCORE$ <> "STRENGTH" THEN LET  NEXTHI$ = "STRENGTH"                         ELSE LET NEXTHI$ = ""
  79. 790    IF HISCORE$ <> "STRENGTH" THEN LET NEXTHI = STRENGTH                              ELSE LET NEXTHI = 0
  80. 800    IF (INTELLIGENCE > NEXTHI) AND (HISCORE$ <> "INTELLIGENCE")                        THEN LET NEXTHI = INTELLIGENCE:                                                 LET NEXTHI$ = "INTELLIGENCE"
  81. 810    IF (WISDOM > NEXTHI) AND (HISCORE$ <> "WISDOM")                                    THEN LET NEXTHI = WISDOM:                                                       LET NEXTHI$ = "WISDOM"
  82. 820    IF (DEXTERITY > NEXTHI) AND (HISCORE$ <> "DEXTERITY")                              THEN LET NEXTHI = DEXTERITY:                                                    LET NEXTHI$ = "DEXTERITY"
  83. 830  'GET 1ST RECOMMENDATION
  84. 840    IF (STRENGTH > 12 AND INTELLIGENCE > 12) AND (INTELLIGENCE > DEXTERITY)             THEN LET REC1$ = "ELF":                                                         GOTO 920
  85. 850    IF (STRENGTH > 12 AND DEXTERITY > 12) THEN LET REC1$ = "HALFLING":                  GOTO 920
  86. 860    IF (HISCORE$ = "STRENGTH" OR NEXTHI$ = "STRENGTH") AND (HISCORE$ = "DEXTERITY" OR NEXTHI$ = "DEXTERITY") THEN LET REC1$ = "HALFLING":                       GOTO  920
  87. 870    IF (HISCORE$ = "STRENGTH" OR NEXTHI$ = "STRENGTH") AND (HISCORE$ = "INTELLIGENCE" OR NEXTHI$ = "INTELLIGENCE") THEN LET REC1$ = "ELF":                       GOTO  920
  88. 880    IF HISCORE$ = "INTELLIGENCE" THEN LET REC1$ = "MAGIC-USER":                        LET HISCORE  = 0:                                                               GOTO 920
  89. 890    IF HISCORE$ = "WISDOM" THEN LET REC1$ = "CLERIC":                                  LET HISCORE = 0:                                                                GOTO 920
  90. 900    IF HISCORE$ = "DEXTERITY" THEN LET REC1$ = "THIEF":                                LET HISCORE = 0:                                                               GOTO 920
  91. 910    IF HISCORE$ = "STRENGTH" THEN LET REC1$ = "DWARF":                               LET REC2$ = "FIGHTER":                                                          GOTO 980
  92. 920  'GET SECOND RECOMMENDATION
  93. 930    IF NEXTHI > HISCORE THEN LET NEXTHI = HISCORE:                                    LET HISCORE$ = NEXTHI$
  94. 940    IF HISCORE$ = "INTELLIGENCE" THEN LET REC2$ = "MAGIC-USER":                        GOTO 980
  95. 950    IF HISCORE$ = "WISDOM" THEN LET REC2$ = "CLERIC":                                 GOTO 980
  96. 960    IF HISCORE$ = "DEXTERITY" THEN LET REC2$ = "THIEF":                                GOTO 980
  97. 970    IF NEXTHI$ = "STRENGTH" THEN LET REC2$ = "DWARF":                               IF REC1$ = "" THEN LET REC2$ = "FIGHTER"
  98. 980  'PRINT RECOMMENDATIONS
  99. 990    IF REC1$ = "" THEN LET REC2$ = REC1$:                                             LET REC2$ = ""
  100. 1000    PRINT
  101. 1010    PRINT "I RECOMMEND ";REC1$;
  102. 1020    IF (REC2$ <> "") AND (REC2$ <> REC1$) THEN PRINT " OR ";REC2$
  103. 1030    LET COL = POS(0)
  104. 1040    LET ROW = CSRLIN
  105. 1050    INPUT CLASS$
  106. 1060    IF LEFT$(CLASS$,1)="C" THEN CLASS$="CLERIC": GOTO 1160
  107. 1070    IF LEFT$(CLASS$,1)="D" THEN CLASS$="DWARF": GOTO 1160
  108. 1080    IF LEFT$(CLASS$,1)="E" THEN CLASS$="ELF": GOTO 1160
  109. 1090    IF LEFT$(CLASS$,1)="F" THEN CLASS$="FIGHTER": GOTO 1160
  110. 1100    IF LEFT$(CLASS$,1)="H" THEN CLASS$="HALFLING": GOTO 1160
  111. 1110    IF LEFT$(CLASS$,1)="M" THEN CLASS$="MAGIC-USER": GOTO 1160
  112. 1120    IF LEFT$(CLASS$,1)="T" THEN CLASS$="THIEF": GOTO 1160
  113. 1130    PRINT "WHAT?"
  114. 1140    LOCATE ROW,COL
  115. 1150    GOTO 1030
  116. 1160  RETURN
  117. 1170 '
  118. 1180 'PRINT SCORES
  119. 1190    LOCATE 1,10
  120. 1200    PRINT "PLAYER ABILITIES"
  121. 1210    LOCATE 2,10
  122. 1220    PRINT "STRENGTH     ";STRENGTH
  123. 1230    LOCATE 3,10
  124. 1240    PRINT "INTELLIGENCE ";INTELLIGENCE
  125. 1250    LOCATE 4,10
  126. 1260    PRINT "WISDOM       ";WISDOM
  127. 1270    LOCATE 5,10
  128. 1280    PRINT "DEXTERITY    ";DEXTERITY
  129. 1290    LOCATE 6,10
  130. 1300    PRINT "CONSTITUTION ";CONSTITUTION
  131. 1310    LOCATE 7,10
  132. 1320    PRINT "CHARISMA     ";CHARISMA
  133. 1330 RETURN
  134. 1340 '
  135. 1350 'PRINT CHOICES
  136. 1360    LOCATE 10,5
  137. 1370    PRINT "CHOOSE A CLASS FOR YOUR CHARACTER"
  138. 1380    PRINT
  139. 1390    PRINT "             CLERIC"
  140. 1400    PRINT "             DWARF"
  141. 1410    PRINT "             ELF"
  142. 1420    PRINT "             FIGHTER"
  143. 1430    PRINT "             HALFLING"
  144. 1440    PRINT "             MAGIC-USER"
  145. 1450    PRINT "             THIEF"
  146. 1460 RETURN
  147. 1470 '
  148. 1480 'GET NEXT AVAILABLE PLAYER
  149. 1490    LET RNO = 0
  150. 1500  'GET A PLAYER RECORD
  151. 1510    LET RNO = RNO + 1
  152. 1520    IF RNO > 10 THEN                                                                  PRINT "NO MORE AVAILABLE PLAYERS ":                                             STOP
  153. 1530    GET #1,RNO
  154. 1540    IF NM$ <> SPACE$(24) THEN GOTO 1500
  155. 1550    PRINT
  156. 1560    PRINT "       YOUR PLAYER NUMBER IS ";RNO
  157. 1570    PRINT
  158. 1580    PRINT "        HIT ANY KEY TO CONTINUE"
  159. 1590    PRINT
  160. 1600    GOSUB 4090      WAIT
  161. 1610    CLS
  162. 1620 RETURN
  163. 1630 '
  164. 1640 'ADJUST ABILITIES
  165. 1650    CLS
  166. 1660    GOSUB 1170      'PRINT ABILITIES
  167. 1670    PRINT
  168. 1680    PRINT "YOUR CHARACTER'S CLASS IS ";CLASS$
  169. 1690    PRINT
  170. 1700    LET MSG$ = "YOU MAY ADJUST "
  171. 1710    IF (CLASS$ = "MAGIC-USER") THEN LET MSG$ = MSG$ + "INTELLIGENCE "
  172. 1720    IF (CLASS$ = "CLERIC") THEN LET MSG$ = MSG$ + "WISDOM "
  173. 1730    IF (CLASS$ = "FIGHTER") OR (CLASS$ = "DWARF") THEN                                    LET MSG$ = MSG$ + "STRENGTH "
  174. 1740    IF (CLASS$ = "HALFLING") THEN                                                           LET MSG$ = MSG$ + "STRENGTH OR DEXTERITY "
  175. 1750    IF (CLASS$ = "THIEF") THEN                                                           LET MSG$ = MSG$ + "DEXTERITY "
  176. 1760    IF (CLASS$ = "ELF") THEN                                                           LET MSG$ = MSG$ + "STRENGTH OR INTELLIGENCE "
  177. 1770    LET MSG$ = MSG$ + "ONE POINT BY"
  178. 1780    LET MSG1$ = "LOWERING "
  179. 1790    IF ((CLASS$  = "MAGIC-USER") OR (CLASS$ = "CLERIC"))                              AND STRENGTH > 10                                                               THEN LET MSG1$ = MSG1$ + "STRENGTH "
  180. 1800    IF ((CLASS$  = "FIGHTER") OR (CLASS$ = "DWARF") OR (CLASS$ = "HALFLING")          OR  (CLASS$ = "THIEF") OR (CLASS$ = "CLERIC"))   AND INTELLIGENCE > 10                  THEN LET MSG1$ = MSG1$ + "INTELLIGENCE "
  181. 1810    IF ((CLASS$  = "FIGHTER") OR (CLASS$ = "DWARF") OR (CLASS$ = "HALFLING")OR  (CLASS$ = "THIEF") OR (CLASS$ = "MAGIC-USER") OR (CLASS$ = "ELF"))           AND WISDOM > 10  THEN LET MSG1$ = MSG1$ + "WISDOM "
  182. 1820    IF MSG1$ = "LOWERING " THEN PRINT  "YOU CANNOT ADJUST ANY ABILITY":              PRINT  "HIT ENTER TO CONTINUE":                                                GOTO 1910
  183. 1830    LET MSG1$ = MSG1$ + " TWO POINTS"
  184. 1840    PRINT MSG$
  185. 1850    PRINT MSG1$
  186. 1860    PRINT
  187. 1870    PRINT "     IF YOU WISH TO RAISE AN ABILITY,   ENTER  THE ABILITY."
  188. 1880    PRINT
  189. 1890    PRINT "     IF YOU DON'T WANT TO ADJUST ANY    ABILITIES, JUST PRESS ENTER."
  190. 1900    LOCATE 21,1
  191. 1910    PRINT "                        "
  192. 1920    LOCATE 21,1
  193. 1930    INPUT ADJ.ABILITY$
  194. 1940    IF ADJ.ABILITY$ = "" THEN GOTO 2280
  195. 1950    IF LEFT$(ADJ.ABILITY$,1)="S" THEN ADJ.ABILITY$="STRENGTH": GOTO 1990
  196. 1960    IF LEFT$(ADJ.ABILITY$,1)="I" THEN ADJ.ABILITY$="INTELLIGENCE": GOTO 1990
  197. 1970    IF LEFT$(ADJ.ABILITY$,1)="W" THEN ADJ.ABILITY$="WISDOM": GOTO 1990
  198. 1980    IF LEFT$(ADJ.ABILITY$,1)="D" THEN ADJ.ABILITY$="DEXTERITY": GOTO 1990
  199. 1990    IF (ADJ.ABILITY$ <> "STRENGTH") AND  (ADJ.ABILITY$ <> "INTELLIGENCE") AND  (ADJ.ABILITY$ <> "WISDOM") AND (ADJ.ABILITY$ <> "DEXTERITY") THEN GOTO 1900
  200. 2000    LOCATE 22,1
  201. 2010    PRINT "WHAT ABILITY DO YOU WANT TO LOWER "
  202. 2020    PRINT "                        "
  203. 2030    LOCATE 23,1
  204. 2040    INPUT " ";LOW.ABILITY$
  205. 2050    IF LEFT$(LOW.ABILITY$,1)="S" THEN LOW.ABILITY$="STRENGTH": GOTO 2090
  206. 2060    IF LEFT$(LOW.ABILITY$,1)="I" THEN LOW.ABILITY$="INTELLIGENCE": GOTO 2090
  207. 2070    IF LEFT$(LOW.ABILITY$,1)="W" THEN LOW.ABILITY$="WISDOM": GOTO 2090
  208. 2080    IF LOW.ABILITY$ = ADJ.ABILITY$ THEN GOTO 1900
  209. 2090    IF (LOW.ABILITY$ <> "STRENGTH") AND  (LOW.ABILITY$ <> "INTELLIGENCE")             AND  (LOW.ABILITY$ <> "WISDOM")  THEN GOTO 2000
  210. 2100    IF (LOW.ABILITY$ = "STRENGTH") AND (STRENGTH < 11) THEN GOTO 2200
  211. 2110    IF (LOW.ABILITY$ = "WISDOM") AND (WISDOM < 11) THEN GOTO 2200
  212. 2120    IF (LOW.ABILITY$ = "INTELLIGENCE")                                                 THEN LET INTELLIGENCE = INTELLIGENCE - 2
  213. 2130    IF (LOW.ABILITY$ = "STRENGTH")                                                     THEN LET STRENGTH = STRENGTH - 2
  214. 2140    IF (LOW.ABILITY$ = "WISDOM")                                                       THEN LET WISDOM = WISDOM - 2
  215. 2150    IF (ADJ.ABILITY$ = "INTELLIGENCE")                                                 THEN LET INTELLIGENCE = INTELLIGENCE + 1
  216. 2160    IF (ADJ.ABILITY$ = "STRENGTH")                                                    THEN LET STRENGTH = STRENGTH + 1
  217. 2170    IF (ADJ.ABILITY$ = "DEXTERITY")                                                   THEN LET DEXTERITY  = DEXTERITY + 1
  218. 2180    IF (ADJ.ABILITY$ = "WISDOM")                                                      THEN LET WISDOM  = WISDOM + 1
  219. 2190    GOTO 1640
  220. 2200 'CANT ADJUST
  221. 2210    CLS
  222. 2220    PRINT "YOU CAN'T LOWER THAT ABILITY"
  223. 2230    PRINT "HIT ANY KEY TO CONTINUE"
  224. 2240    GOSUB 4090      WAIT
  225. 2250    CLS
  226. 2260    GOSUB 1180
  227. 2270    GOTO 1640
  228. 2280 RETURN
  229. 2290 'END
  230. 2300    CLOSE
  231. 2310     CHAIN "MENU",1000
  232. 2320 '
  233. 2330 'KILL A PLAYER
  234. 2340    CLS
  235. 2350    PRINT "      KILL A PLAYER CHARACTER"
  236. 2360    PRINT
  237. 2370    PRINT "IF YOU KNOW THE PLAYER NUMBER, ENTER IT, OTHERWISE ENTER 0"
  238. 2380    INPUT RNO
  239. 2390    IF RNO < 0 OR RNO > 10 THEN PRINT "WHAT?": GOTO 2370
  240. 2400    IF RNO = 0 THEN GOTO 2430       'GET PLAYER NAME
  241. 2410    GET #1,RNO
  242. 2420    GOTO 2520       'DOUBLE CHECK
  243. 2430 'GET PLAYERS NAME
  244. 2440    INPUT "ENTER CHARACTER'S NAME ",INNM$
  245. 2450    LET SEEKNM$ = SPACE$(24)
  246. 2460    LSET SEEKNM$ = INNM$
  247. 2470    LET RNO = 0
  248. 2480    LET RNO = RNO + 1
  249. 2490    IF RNO > 10 THEN PRINT "CHARACTER NAME NOT FOUND":                                GOTO 2370
  250. 2500    GET #1,RNO
  251. 2510    IF NM$ <> SEEKNM$ THEN GOTO 2480
  252. 2520 'DOUBLE CHECK
  253. 2530    PRINT "DO YOU WANT TO KILL ";NM$;"?.  ENTER YES OR NO"
  254. 2540    INPUT REPLY$
  255. 2550    IF LEFT$(REPLY$,1) = "Y" OR LEFT$(REPLY$,1) = "y" THEN GOTO 2570
  256. 2560    GOTO 2610
  257. 2570 ' KILL THE CHARACTER
  258. 2580    LSET NM$ = SPACE$(24)
  259. 2590    PUT #1,RNO
  260. 2600    GOSUB 4620 'ZERO SUPPLIES
  261. 2610 RETURN
  262. 2620 '
  263. 2630 'TITLE SCREEN
  264. 2640      SCREEN 3
  265. 2650      KEY OFF
  266. 2660      WIDTH 20
  267. 2670      COLOR 1,4
  268. 2680      CLS
  269. 2690      LOCATE 4,1
  270. 2700    PRINT "       THE"
  271. 2710    LOCATE 7,1
  272. 2720    PRINT "      PLAYER"
  273. 2730    LOCATE 10,1
  274. 2740    PRINT "    CHARACTERS"
  275. 2750 'KILL TIME
  276. 2760     FOR X = 1 TO 500
  277. 2770       NEXT X
  278. 2780 RETURN
  279. 2790 '
  280. 2800 'PRINT MENU
  281. 2810     SCREEN 1
  282. 2820     WIDTH 40
  283. 2830     COLOR 4,1
  284. 2840     CLS
  285. 2850     LOCATE 3,1
  286. 2860     PRINT "         THE PLAYER CHARACTERS"
  287. 2870    LOCATE  7,6
  288. 2880    PRINT "1. CREATE A NEW PLAYER CHARACTER"
  289. 2890    LOCATE 9,6
  290. 2900    PRINT "2. LIST A PLAYER CHARACTER"
  291. 2910    LOCATE 11,6
  292. 2920    PRINT "3. KILL A PLAYER CHARACTER"
  293. 2930    LOCATE 13,6
  294. 2940    PRINT "9. END "
  295. 2950 RETURN
  296. 2960 '
  297. 2970 'GET HIT POINTS
  298. 2980    CLS
  299. 2990    PRINT "            HIT POINTS"
  300. 3000    PRINT
  301. 3010    PRINT
  302. 3020    IF CLASS$ = "CLERIC" THEN LET DICE = 6
  303. 3030    IF CLASS$ = "DWARF" THEN LET DICE = 8
  304. 3040    IF CLASS$ = "ELF" THEN LET DICE = 6
  305. 3050    IF CLASS$ = "FIGHTER" THEN LET DICE = 8
  306. 3060    IF CLASS$ = "HALFLING" THEN LET DICE = 6
  307. 3070    IF CLASS$ = "MAGIC-USER" THEN LET DICE = 4
  308. 3080    IF CLASS$ = "THIEF" THEN LET DICE = 4
  309. 3090    LET HIT.POINTS = INT(DICE * RND) + 1
  310. 3100    IF HIT.POINTS < 3 THEN GOTO 3090
  311. 3110    IF CONSTITUTION < 4 THEN LET HIT.POINTS = HIT.POINTS - 3:                         GOTO 3180
  312. 3120    IF CONSTITUTION < 6 THEN LET HIT.POINTS = HIT.POINTS - 2:                          GOTO 3180
  313. 3130    IF CONSTITUTION < 9 THEN LET HIT.POINTS = HIT.POINTS - 1:                         GOTO 3180
  314. 3140    IF CONSTITUTION < 13 THEN  GOTO 3180
  315. 3150    IF CONSTITUTION < 16 THEN LET HIT.POINTS = HIT.POINTS +1:                          GOTO 3180
  316. 3160    IF CONSTITUTION < 18 THEN LET HIT.POINTS = HIT.POINTS +2:                          GOTO 3180
  317. 3170    LET HIT.POINTS = HIT.POINTS +3
  318. 3180    IF HIT.POINTS < 3 THEN GOTO 3090
  319. 3190    PRINT "YOUR HIT POINTS ARE  ";HIT.POINTS
  320. 3200 RETURN
  321. 3210 '
  322. 3220 'GET MONEY
  323. 3230    LET MONEY! = 0
  324. 3240    RANDOMIZE TIMER
  325. 3250    LET MONEY! = INT(RND * 6) + 1
  326. 3260    LET MONEY! = MONEY! + INT(RND * 6) + 1
  327. 3270    LET MONEY! = MONEY! + INT(RND * 6) + 1
  328. 3280    LET MONEY! = MONEY! * 10
  329. 3290    PRINT
  330. 3300    PRINT "YOU HAVE ";MONEY!;" GOLD PIECES
  331. 3310 RETURN
  332. 3320 '
  333. 3330 'GET NAME FOR CHARACTER
  334. 3340    PRINT
  335. 3350    PRINT "CHOOSE A NAME FOR YOUR CHARACTER"
  336. 3360    PRINT
  337. 3370    LET COL = POS(0)
  338. 3380    LET ROW = CSRLIN
  339. 3390    PRINT "........................"
  340. 3400    LOCATE ROW,COL
  341. 3410    INPUT CHAR.NAME$
  342. 3420 RETURN
  343. 3430 '
  344. 3440 'OPEN FILES
  345. 3450      OPEN "DUNCHAR" AS #1 LEN = 122
  346. 3460      FIELD #1,2 AS STRN$,2 AS INTL$,2 AS WIS$,2 AS DEX$,2 AS CON$,2 AS CHA$,10 AS CLAS$,2 AS HIT$,4 AS MONEY$,2 AS LVL$,2 AS ARM$,2 AS SV.POISON$,2 AS SV.MAGIC$,2 AS SV.STONE$,2 AS SV.DRAG$,2 AS SV.SPELL$,4 AS EXPR$,24 AS NM$,7 AS ALIGN$,45 AS D$ ''
  347. 3470    OPEN "DUNSHOP" AS #2 LEN=44
  348. 3480    FIELD #2,2 AS SID$,1 AS SCLASS$,15 AS SNAME$,2 AS SCOST$,2 AS SDAM$,2 AS SWT$,2 AS P1$,2 AS P2$,2 AS P3$,2 AS P4$,2 AS P5$,2 AS P6$,2 AS P7$,2 AS P8$,2 AS P9$,2 AS P10$
  349. 3490 RETURN
  350. 3500 '
  351. 3510 'UPDATE PLAYER RECORD
  352. 3520    LSET STRN$ = MKI$(STRENGTH)
  353. 3530    LSET INTL$ = MKI$(INTELLIGENCE)
  354. 3540    LSET WIS$ = MKI$(WISDOM)
  355. 3550    LSET DEX$ = MKI$(DEXTERITY)
  356. 3560    LSET CON$ = MKI$(CONSTITUTION)
  357. 3570    LSET CHA$ = MKI$(CHARISMA)
  358. 3580    LSET CLAS$ = CLASS$
  359. 3590    LSET HIT$ = MKI$(HIT.POINTS)
  360. 3600    LSET MONEY$ = MKS$(MONEY!)
  361. 3610    LSET LVL$ = MKI$(1)
  362. 3620    LSET ARM$ = MKI$(ARMOR.CLASS)
  363. 3630    LSET SV.POISON$ = MKI$(SV.POISON)
  364. 3640    LSET SV.MAGIC$ = MKI$(SV.MAGIC)
  365. 3650    LSET SV.STONE$ = MKI$(SV.STONE)
  366. 3660    LSET SV.DRAG$ = MKI$(SV.DRAGON)
  367. 3670    LSET SV.SPELL$ = MKI$(SV.SPELL)
  368. 3680    LSET EXPR$ = MKS$(0)
  369. 3690    LSET NM$ = CHAR.NAME$
  370. 3700    LSET ALIGN$ = ALIGNMENT$
  371. 3710    PUT #1,RNO
  372. 3720 RETURN
  373. 3730 '
  374. 3740 'GET ALIGNMENT
  375. 3750    CLS
  376. 3760    PRINT "          CHARACTER ALIGNMENT"
  377. 3770    PRINT
  378. 3780    PRINT "             LAWFUL"
  379. 3790    PRINT "             CHAOTIC"
  380. 3800    PRINT "             NEUTRAL"
  381. 3810    PRINT
  382. 3820    INPUT " ENTER YOUR CHOICE ",ALIGNMENT$
  383. 3830    IF LEFT$(ALIGNMENT$,1)="L" THEN ALIGNMENT$="LAWFUL": GOTO 3860
  384. 3840    IF LEFT$(ALIGNMENT$,1)="C" THEN ALIGNMENT$="CHAOTIC": GOTO 3860
  385. 3850    IF LEFT$(ALIGNMENT$,1)="N" THEN ALIGNMENT$="NEUTRAL": GOTO 3860
  386. 3860    IF (ALIGNMENT$ <> "LAWFUL") AND (ALIGNMENT$ <> "CHAOTIC") AND                      (ALIGNMENT$ <> "NEUTRAL")                                                       THEN PRINT "WHAT?": GOTO 3810
  387. 3870 RETURN
  388. 3880 '
  389. 3890 'GET SAVING THROWS
  390. 3900    IF CLASS$ = "CLERIC" THEN                                                          LET SV.POISON = 11: LET SV.MAGIC = 12:                                          LET SV.STONE = 14: LET SV.DRAGON = 16: LET SV.SPELL = 15
  391. 3910    IF CLASS$ = "DWARF" OR CLASS$ = "HALFLING"  THEN                                   LET SV.POISON = 10: LET SV.MAGIC = 11:                                          LET SV.STONE = 12: LET SV.DRAGON = 13: LET SV.SPELL = 14
  392. 3920    IF CLASS$ = "ELF" THEN                                                             LET SV.POISON = 12: LET SV.MAGIC = 13:                                          LET SV.STONE = 13: LET SV.DRAGON = 15: LET SV.SPELL = 15
  393. 3930    IF CLASS$ = "FIGHTER" THEN                                                         LET SV.POISON = 12: LET SV.MAGIC = 13:                                          LET SV.STONE = 14: LET SV.DRAGON = 15: LET SV.SPELL = 16
  394. 3940    IF CLASS$ = "MAGIC-USER" THEN                                                      LET SV.POISON = 13: LET SV.MAGIC = 14:                                          LET SV.STONE = 13: LET SV.DRAGON = 16: LET SV.SPELL = 15
  395. 3950    IF CLASS$ = "THIEF" THEN                                                           LET SV.POISON = 13: LET SV.MAGIC = 14:                                          LET SV.STONE = 13: LET SV.DRAGON = 16: LET SV.SPELL = 15
  396. 3960    CLS
  397. 3970    PRINT "        SAVING THROWS"
  398. 3980    PRINT
  399. 3990    PRINT "DEATH RAY/POISON          ";SV.POISON
  400. 4000    PRINT "MAGIC WANDS               ";SV.MAGIC
  401. 4010    PRINT "PARALYSIS/TURN TO STONE   ";SV.STONE
  402. 4020    PRINT "DRAGON BREATH             ";SV.DRAGON
  403. 4030    PRINT "RODS, STAVES OR SPELLS    ";SV.SPELL
  404. 4040    PRINT
  405. 4050    PRINT "HIT ANY KEY TO CONTINUE"
  406. 4060    GOSUB 4090      'WAIT
  407. 4070 RETURN
  408. 4080 '
  409. 4090 'WAIT FOR A CHARACTER
  410. 4100    DEF SEG=0: POKE 1050,PEEK(1052)  'CLEAR KEYBOARD BUFFER
  411. 4110    LET REPLY$ = INKEY$
  412. 4120    IF REPLY$ = "" THEN GOTO 4110
  413. 4130 RETURN
  414. 4140    '
  415. 4150 'LIST A CHARACTER
  416. 4160    CLS
  417. 4170    PRINT "      LIST A PLAYER CHARACTER"
  418. 4180    PRINT
  419. 4190    PRINT "IF YOU KNOW THE PLAYER NUMBER, ENTER IT, OTHERWISE ENTER 0"
  420. 4200    INPUT RNO
  421. 4210    IF RNO < 0 OR RNO > 10 THEN PRINT "WHAT?": GOTO 4190
  422. 4220    IF RNO = 0 THEN GOTO 4250       'GET PLAYER NAME
  423. 4230    GET #1,RNO
  424. 4240    GOTO 4340       'LIST IT
  425. 4250 'GET PLAYERS NAME
  426. 4260    INPUT "ENTER CHARACTER'S NAME ",INNM$
  427. 4270    LET SEEKNM$ = SPACE$(24)
  428. 4280    LSET SEEKNM$ = INNM$
  429. 4290    LET RNO = 0
  430. 4300    LET RNO = RNO + 1
  431. 4310    IF RNO > 10 THEN PRINT "CHARACTER NAME NOT FOUND":                                GOTO 4600
  432. 4320    GET #1,RNO
  433. 4330    IF NM$ <> SEEKNM$ THEN GOTO 4300
  434. 4340 'LIST IT
  435. 4350    CLS
  436. 4360    PRINT "PLAYER ";RNO;"   ";NM$
  437. 4370    PRINT "ALIGNMENT ";ALIGN$
  438. 4380    PRINT "CLASS ";CLAS$;"  LEVEL ";CVI(LVL$)
  439. 4390    PRINT "ARMOR CLASS  ";CVI(ARM$);"       HIT POINTS ";CVI(HIT$)
  440. 4400    PRINT
  441. 4410    PRINT "           ABILITIES "
  442. 4420    PRINT "STRENGTH    ";CVI(STRN$)
  443. 4430    PRINT "INTELLIGENCE";CVI(INTL$)
  444. 4440    PRINT "WISDOM      ";CVI(WIS$)
  445. 4450    PRINT "DEXTERITY   ";CVI(DEX$)
  446. 4460    PRINT "CONSTITUTION";CVI(CON$)
  447. 4470    PRINT "CHARAISMA   ";CVI(CHA$)
  448. 4480    PRINT
  449. 4490    PRINT "         SAVING THROWS "
  450. 4500    PRINT "POISON OR DEATH RAY";CVI(SV.POISON$)
  451. 4510    PRINT "MAGIC WAND         ";CVI(SV.MAGIC$)
  452. 4520    PRINT "TURN TO STONE      "
  453. 4530    PRINT "    /PARALYSIS     ";CVI(SV.STONE$)
  454. 4540    PRINT "DRAGON BREATH      ";CVI(SV.DRAG$)
  455. 4550    PRINT "SPELLS/MAGIC STAFF ";CVI(SV.MAGIC$)
  456. 4560    PRINT
  457. 4570    PRINT "EXPERIENCE ";CVS(EXPR$);" MONEY ";CVS(MONEY$)
  458. 4580    PRINT "HIT ANY KEY TO CONTINUE"
  459. 4590    GOSUB  4090     'WAIT
  460. 4600 RETURN
  461. 4610 '
  462. 4620 'ZERO SUPPLIES
  463. 4630    LET SNO=0
  464. 4640 'GO THRU FILE
  465. 4650    SNO=SNO+1
  466. 4660    GET #2,SNO
  467. 4670    IF SID$ <> "DS" THEN GOTO 4810 ' END OF FILE
  468. 4680    ON RNO GOTO 4690,4700,4710,4720,4730,4740,4750,4760,4770,4780
  469. 4690    LSET P1$ = MKI$(0): GOTO 4790
  470. 4700    LSET P2$ = MKI$(0): GOTO 4790
  471. 4710    LSET P3$ = MKI$(0): GOTO 4790
  472. 4720    LSET P4$ = MKI$(0): GOTO 4790
  473. 4730    LSET P5$ = MKI$(0): GOTO 4790
  474. 4740    LSET P6$ = MKI$(0): GOTO 4790
  475. 4750    LSET P7$ = MKI$(0): GOTO 4790
  476. 4760    LSET P8$ = MKI$(0): GOTO 4790
  477. 4770    LSET P9$ = MKI$(0): GOTO 4790
  478. 4780    LSET P10$ = MKI$(0): GOTO 4790
  479. 4790    PUT #2,SNO
  480. 4800    GOTO 4640
  481. 4810 RETURN
  482. 4820 'GET ARMOR CLASS ADJUSTMENT
  483. 4830    IF DEXTERITY < 4 THEN ARMOR.CLASS = -3: GOTO 4900
  484. 4840    IF DEXTERITY < 6 THEN ARMOR.CLASS = -2: GOTO 4900
  485. 4850    IF DEXTERITY < 9 THEN ARMOR.CLASS = -1: GOTO 4900
  486. 4860    IF DEXTERITY < 13 THEN ARMOR.CLASS = 0: GOTO 4900
  487. 4870    IF DEXTERITY < 16 THEN ARMOR.CLASS = +1: GOTO 4900
  488. 4880    IF DEXTERITY < 18 THEN ARMOR.CLASS = +2: GOTO 4900
  489. 4890    ARMOR.CLASS = +3
  490. 4900 RETURN
  491.